#ifndef __BSP_USART_H
#define __BSP_USART_H

#include "stm32f1xx_hal.h"
#include <stdio.h>
#include <string.h>

// 串口硬件定义
#define USARTx USART1
#define USARTx_CLK_ENABLE() __HAL_RCC_USART1_CLK_ENABLE()
#define USARTx_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
#define USARTx_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()

#define USARTx_TX_PIN GPIO_PIN_9
#define USARTx_TX_GPIO_PORT GPIOA
#define USARTx_TX_AF GPIO_AF7_USART1

#define USARTx_RX_PIN GPIO_PIN_10
#define USARTx_RX_GPIO_PORT GPIOA
#define USARTx_RX_AF GPIO_AF7_USART1

#define USARTy USART3
#define USARTy_CLK_ENABLE() __HAL_RCC_USART3_CLK_ENABLE()
#define USARTy_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
#define USARTy_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()

#define USARTy_TX_PIN GPIO_PIN_10
#define USARTy_TX_GPIO_PORT GPIOB
#define USARTy_TX_AF GPIO_AF7_USART3

#define USARTy_RX_PIN GPIO_PIN_11
#define USARTy_RX_GPIO_PORT GPIOB
#define USARTy_RX_AF GPIO_AF7_USART3

// 缓冲区大小
#define USARTy_RX_BUF_SIZE 256

typedef struct
{
    uint8_t uart3Rxbuf[USARTy_RX_BUF_SIZE];
    uint16_t uart3RxLen ; // 实际接收长度
    uint8_t g_state_flag ;
} UARTy_dma_buf;

// USART 句柄
extern UART_HandleTypeDef huartx;
extern UART_HandleTypeDef huarty;
extern UARTy_dma_buf g_UARTy_dma_buf_t ;

// 函数声明
void bsp_usart1_Init(void);
void Error_Handler(void);
void bsp_usart3_Init(void);
void esp8266_print_response(void);
void led_init(void);

uint8_t Key_Scan(void);
#endif
